查看原文
其他

一位程序员爸爸的“大白话”:几岁开始学编程比较好,怎么上手?

2017-07-04 周花卷 小花生网

檩子:我在很多场合听到过这么一个说法:未来,编程和英语会一样重要,都是孩子在这个世界上生存所必备的基础技能。的确,美国前总统奥巴马还发起过“编程一小时”活动,号召孩子们都参与到编程学习中来,他说:


“不要只是买一个新的电脑游戏,自己做一个;不要只是下载最新的应用程序,帮助设计它;不要只是在手机上玩玩,编写它的代码。”


最近几年,儿童编程在国内也越来越热。不过这个问题对我们大多数人来说,还是挺新鲜和陌生的,比如:要不要学?什么时候开始学?怎么学?要不要报培训班,等等 ... 


本文作者@周花卷,是一位资深程序员爸爸;在这篇文章里详细解答了孩子学编程家长普遍关心的问题,还推荐了一些比较容易入手的编程学习资源。


世界即将走向人工智能的时代,小朋友的学习,自然也要与时俱进;感谢@周花卷的分享,让我们共同努力,走在时代前列!


本文由小花生网友@周花卷发布于小花生写作计划


学编程现在似乎挺热门的,特别是大家最近被WWDC(苹果开发者大会)的最小开发者刷了屏。


参加WWDC的最小开发者,9岁的澳洲小女孩Anvitha Vijay


还记得我小时候,正是邓小平提出“计算机要从娃娃抓起”的时候,老师说大家都应该学会计算机,否则就是新时代的文盲。


说实话,这个说法现在应验了,因为不会用计算机真的没办法工作。


那么不会编程,会不会成为一个新时代的文盲呢?


这我不好说,我只能说编程的意义并不仅限于编程本身,而且作为一个热爱编程的,也在靠写代码混口饭吃的爸爸,我觉得让孩子学学编程挺有意义的。


我现在是一个准全职爸爸,在家带两个娃,在此之前从事软件开发、技术和管理咨询方面的工作,也翻译出版了不少计算机技术方面的书籍。


我自己很早就接触了编程,大概是6岁的时候,我表哥家里有一台“中华学习机”,那是一台国产的Apple II 兼容计算机。



它可以编写和运行BASIC程序,有趣的是,它的数据只能用声音信号存储在磁带上,每次保存程序就按录音机的录音键,读取程序就按录音机的播放键,那个仪式感特别神圣。


那时候我在学习机上写了很多小程序,比如跟计算机猜拳的程序、比大小的程序、算日期的程序等等。


上小学之后,表哥家里有了一台486的PC机,于是可以用更强大的QBASIC编写更复杂的程序。



上初中之后,自己家里也买了电脑,就开始用Visual Basic写Windows软件,还参加过NOI(国家信息学奥赛)。


这些经历在我的同龄人当中都算是比较稀有的,但也正因为如此,遇到问题我也找不到什么人去请教,上高中之后忙于学业,没有能深入钻研数据结构和算法,算是个不小的遗憾吧。


但是我还是走上了程序员的职业之路。因为热爱编程,又在当爸爸,所以一直在参与讨论“孩子学编程”这个话题,这方面,我陆陆续续做过一些分享,在这里我整理几个遇到的常见问题,用问答的形式写一写自己的体会,希望能有更多家长对儿童编程启蒙有个基本了解。


1、编程能培养孩子的哪些能力?


编程是一件很有趣的事情,我觉得主要能培养五个方面的能力:策划构思能力、逻辑分析能力、模式识别能力、问题分解能力、测试纠错能力。这些重要的思维能力,不光在编程上很重要,也适用于各行各业。


1构思能力


编程是一种“先写剧本,后看结果”的活动,这要求孩子先在脑子里进行构思并模拟出结果,然后再实际验证结果是不是符合预期。


这是一个“异步”的过程,对于这种“都得事先想好”的方式,孩子一开始是不适应的,因为这违背他们的直觉。


我见过很多父母给孩子买“迷宫书”,其实走迷宫也包含这个要素,有的孩子会先在脑子里走一遍,然后一次性下笔把路线画出来,这就是一种构思和模拟能力的体现。



2逻辑能力


编程需要考虑到各种情况,根据不同的情况作出不同的选择(分支),而且各个分支之间不能重复,也要避免遗漏某一种可能性造成程序的异常行为。


在逻辑思维中有个词叫做MECE(Mutually Exclusive and Collectively Exhaustive),意思就是“相互排斥且整体完备”,也就是“不重复,不遗漏”。这是逻辑思维中的一个重要原则。



举个例子,交通信号灯有红、黄、绿三种状态,如果你在写程序的时候只考虑了红灯和绿灯的情况,没考虑黄灯的情况,那就不“完备”了。


此外,条件还会涉及到“与”、“或”、“非”等逻辑操作,比如说,“当信号灯为红色或黄色时”和“当信号灯不是绿色时”这两个描述应该是等价的,这对于孩子来说都是非常好的逻辑训练。



3模式识别能力


在编程中,我们经常需要发现一些“可以重复”的单元,然后让计算机去重复它。


举个简单的例子,计算(1+5)×4相当于(1+5)+(1+5)+(1+5)+(1+5),其中每一个(1+5)就是一个可重复的单元,或者说是一种模式(pattern)。


在解决实际问题时,模式并不都是显而易见的,有些模式是隐藏的,或者需要一定的变换才能出现的,这些都考验孩子观察力和识别力。


4分解问题的能力


一些复杂的问题都可以分解中等的问题,中等的问题还可以进一步分解成小问题。在解决复杂问题时,问题的分解是非常重要的,编程中我们也经常需要使用这样的方法。


举个例子,比如要造一辆汽车,我们先要把汽车分解成很多小的部件,比如发动机、变速器等,这些部件还可以继续分解成更小的部件,我们需要先造好每一个小部件,再把他们组合起来变成一辆汽车。


5调试纠错能力


任何工作都无法一蹴而就,是人总会犯错误,程序运行起来发现不对有问题,这时就需要孩子能够找到出错的地方在哪里,并且将它改正。这里面包含的能力很多,比如抗挫折力、观察力、专注力等等。


总之,通过学习编程所培养的能力并不只是适用于编程,而是可以在很多方面派上用场。


2、几岁开始学比较好,怎么上手?


按照我的经历,是6岁开始接触编程的,但现在我们有各种可视化的编程环境,还有各种编程游戏App、桌游和玩具,所以还可以往低龄推移。


我家哥哥是4岁开始接触简单的编程游戏的,接受度非常好(他的抽象思维能力是比较超前),4岁应该是一个可选的起点,再小的话思维能力还达不到,揠苗助长也没意思。


另外还是那句老话:兴趣第一。如果孩子没兴趣,跟逼他练钢琴也没什么两样。


关于不同年龄段的孩子怎么开始学编程,这是我的建议:


14 - 6岁:编程小游戏


入门阶段,可以先带孩子玩一些编程小游戏,比如用指令控制一个角色到达终点,绕过一些障碍物,用循环来完成重复任务等等。


我家哥哥玩过的不错的游戏包括:Box Island、LightBot Jr.等。



Box Island - 屡获殊荣的代码编写冒险游戏,孩子们运用循环和条件等编程基础知识逐步解锁,游戏玩法充满乐趣和挑战。游戏具有 100 个等级,其中前 10 个等级免费。(可免费下载)



LightBot Jr. 是一款益智解谜游戏。游戏中,玩家需要为灯泡机器人设定编码路线,让其将所有的灯泡点亮。通过这样的解谜游戏,让孩子了解简单的编码逻辑,以及调试问题和解决问题的能力。游戏目前一共有42个关卡,可以试着挑战一下~(付费下载:18元)



27 - 9岁:可视化编程工具


这个阶段,可以让孩子用一些可视化编程工具来完成一些复杂的任务,比如Scratch、App Inventor等。也可以挑战一些复杂的编程游戏,比如Cargo-Bot、Human Resource Machine等。



Scratch是一款由麻省理工学院(MIT) 设计开发的一款面向少年的简易编程工具。这个软件的特点是:使用者可以不认识英文单词,也可以不会使用键盘。构成程序的命令和参数通过积木形状的模块来实现,用鼠标拖动模块到程序编辑栏就可以了。Scratch下载是完全免费的。



App Inventor原是Google Lab 的一个子计划,是一个完全在线开发的Android编程环境,抛弃复杂的程式代码,而使用积木式的堆叠法来完成Android程式。除此之外,它也支持乐高NXT机器人,适合Android初学者或是机器人开发者。App Inventor 2012年移交给麻省理工学院行动学习中心。



Cargo-Bot是第一个完全针对iPad开发的编程学习应用。它的难度起点非常适合5岁以上的儿童,但是随着游戏的不断进行,其难度也会不断增加。游戏者需要在一个厂房中使用吊车来移动木箱。孩子可以在游戏的进程中学习各种编程知识,例如循环和调试等。(可免费下载)



Human Resource Machine由粘粘世界(World of Goo)的设计者和制作小小炼狱(Little Inferno)的团队共同制作,游戏虽是走解谜路线,但玩法相当新颖:玩家将扮演一个从基层做起的员工,需要通过指令代码来编写一条条程序,完成每个阶段的任务,最终走上职场巅峰。是不是听起来就很有意思?(需付费下载:30元)


310岁+:学习编程语言


这时候,孩子们可以开始学习一种真正的编程语言,比如Swift、Python等,尝试编写一些软件,初步学习算法、数据结构以及面向对象编程。也可以尝试一些硬件编程,比如用Arduino做个小机器人。




Swift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C*共同运行于Mac OS和iO 45 34323 45 15533 0 0 2680 0 0:00:12 0:00:05 0:00:07 2866S平台,用于搭建基于苹果平台的应用程序。Swift是一款易学易用的编程语言,还是第一套具有与脚本语言同样的表现力和趣味性的系统编程语言。



Arduino是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。它构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境。只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要做些什么了。


我认为对于接受度好的孩子,可视化编程的部分可以跳过去,那个不是学编程的必经阶段。或者这么说,如果你是7~9岁才开始入门的,那么用Scratch之类的东西没问题;如果你4岁时已经入门了,那么7-9岁时可以不必按部就班地上Scratch,直接奔着Swift、Python这种正经编程语言去就可以了。就好像学自行车不是一定要用辅助轮一样,有些孩子不用辅助轮反而学得快。


关于书,我只看过两本,一本叫《Scratch少儿趣味编程》(这本书最近还出了2),一本叫《父与子的编程之旅:与小卡特一起学Python》,都是国外引进的书。其他的书欢迎大家推荐吧!



3、学编程是不是一定要数学好?


首先应该搞清楚的是,数学和算术是两码事,孩子对数字敏感不敏感,会不会做加减乘除,跟能不能学好编程关系不大,跟能不能学好数学关系也不大。


编程和数学确实是相辅相成的,因为编程所需要的很多能力和数学所需要的能力是相通的,比如逻辑完备性、模式识别等等;编程中的一些概念也是来自数学,比如函数;而到了学算法的时候,就会用到更多的数学思想和工具;至于最近特别火的机器学习,那更是纯数学模型。


对于这个问题,我只能说,编程和数学应该是相互促进的关系,学编程有利于更好地学数学,而学好数学当然也能够帮助你更好地学编程。



4、自己不会,怎么教孩子学?


说实话,就4岁孩子玩的那些编程游戏,再不会编程的家长,看一眼也都能玩,怎么可能智商还不如4岁的娃呢?


所以就启蒙来说,我不相信哪个家长不能胜任,主要有没有兴趣和时间。


当然,到了正经学编程语言、算法和数据结构这些东西的阶段,如果家长不会编程,那肯定是辅导不了了。


但反过来说,到了这个阶段,孩子都可以自主学习了,也可以通过交朋友、参加兴趣班等方式来学。


5、要不要让孩子去上编程培训班?


关于社会上的培训机构,虽然最近冒出来一些,但比起学英语学画画学乐器的少多了。乐高机器人有,教Scratch的,还有用Swift Playgrounds的夏令营,不过这些一般都针对比较大的孩子。


这些培训我都没实际考察过,也很难给出个评价。就我从几个业内朋友了解到的情况看,这类编程培训目前还都比较初步,主要的困难在于教师资源的缺乏。


和其他一些培训不同,编程培训的教师很难“速成”出来,而本身做这方面工作的人很少会出来做教孩子编程的工作,而且这样的人也很贵。


现在也有很多专业的“码农”转身出来创业做青少年编程培训,但自己上阵也只能做一些小众的培训,要想做大,一样面临“老师难找”的问题。


我觉得对于不具备相关知识的父母来说,还是可以让孩子通过参加这类培训来启蒙和培养兴趣的。


6、有哪些编程方面的比赛?


最有名的当然是国际信息学奥赛(IOI,International Olympiad in Informatics),这是仅次于国际数学奥赛的规模第二大的国际青少年学科竞赛,也是编程领域最高级别的国际比赛。


今年第29届国际信息学奥林匹克竞赛(IOI2017)将在伊朗举办


在中国有相应的国家信息学奥赛(NOI),我在初中和高中的时候也参加过,成绩一般(算法没学好嘛)。这项比赛是偏重算法的,对数学的要求也比较高,但如果在NOI中拿奖,就会被很多一流大学mark。


除了编程比赛,还有很多机器人方面的比赛,不过我没太仔细了解过。我所知道的大概就是乐高赞助的国际机器人奥赛(WRO,World Robot Olympiad),中国也有相应的国内比赛。



机器人比赛考察的能力更宽泛,但对算法的要求就比较低——或者说,信息学比赛更偏重Science,机器人比赛更偏重Engineering。比赛不是学习的目的,如果有能力的话去挑战一下也不错。


7、学编程要花很多时间在屏幕前,会影响视力么?


这个问题很大程度上是个误会。


近视的最大影响因素在于基因,环境因素的影响相对较小。在环境因素中,目前认为相关性(并非因果性)最强的是户外活动时间,户外活动时间长有助于减少近视的发生率,这可能和阳光的刺激有关。


除此之外,无论是看书的距离、姿势和时间、光线的明暗,以及电子屏幕的使用,都没有证据表明这些和近视的发生率有关,网上的很多文章其实都是吓唬人的,或者是犯了因果倒置、选择偏见(cherry picking)之类的逻辑错误。


因此,只要不是户外活动,无论是看书、玩玩具还是使用电子设备,这些都是划等号的,如果说认为看书就是比用电子设备要“不伤眼”,那只能是自欺欺人。


我家不限制孩子使用电子设备的时间,基本管够,中间提醒休息,但会确保每天户外活动的时间。


你的故事:小花生“一线大白话”专栏持续征集中,欢迎来小花生网(www.xiaohuasheng.cn)分享你在工作、爱好中的独特经验和感悟!如被微信选用,会有特别感谢!也欢迎加编辑微信(linzi1939)询问交流…

点击阅读原文,可以和作者直接交流 ... 


更多一线“大白话”:



感谢订阅 “小花生网”


和你分享世界上先进的教育资源

周一:英文原版新书开团

周二:话说思维和方法

周三:怎么阅读,怎么学英语

周四、五:真实成长经历,教育实践

周六、日:有趣的观点和画报


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存